package com.zwps.biz.controller.http;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zwps.biz.api.model.dto.zhakou.ZhaKouDTO;
import com.zwps.biz.domain.service.ZZhakongService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import java.util.Map;

//import org.apache.poi.ss.usermodel.*;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
//import java.io.FileInputStream;
//import java.math.BigDecimal;
//import java.sql.*;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;

@RestController
@Validated
@RequestMapping("brief/floodgate")
public class ZZhakongController {

    @Autowired
    private ZZhakongService service;

    @Tag(name = "工程概况")
    @PostMapping("gate_data")
    @Operation(summary = "获取闸口数据")
    public IPage<Map<String, Object>> getGateData(@Valid @NotNull @RequestBody ZhaKouDTO zhaKouDTO) {
        return service.getGateData(zhaKouDTO);
    }
//
//
//
//    // 数据库配置
//    private static final String DB_URL = "jdbc:mysql://localhost:3306/lkhsk";
//    private static final String DB_USER = "root";
//    private static final String DB_PASSWORD = "123456";
//
//    public static void main(String[] args) {
//        String excelFilePath = "C:\\Users\\Administrator\\Desktop\\项目表结构变化\\淹没范围成果汇总\\淹没范围成果汇总\\07遇2020年洪水按实际调度图表成果\\龙河口遇2020年洪水按实际调度下游淹没建筑人口地类数据0807.xls";
//
//
//        try (FileInputStream fis = new FileInputStream(excelFilePath);
//             Workbook workbook = WorkbookFactory.create(fis)) {
//
//
//                // 遍历所有 Sheet
//                for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
//                    Sheet sheet = workbook.getSheetAt(i);
//                    String sheetName = sheet.getSheetName(); // 如 "1.0", "2", "3.5"
//
//                    // 1. 从工作表名称中提取 waterlevel（如 "1.0" → 1.0）
//                    double waterlevel = extractWaterlevel(sheetName);
//                    if (waterlevel < 0) {
//                        System.out.println("⚠️ 工作表 '" + sheetName + "' 的水位数值无效，跳过。");
//                        continue;
//                    }
//                    System.out.println("🔍 正在处理工作表: " + sheetName + " | waterlevel=" + waterlevel);
//
//                    // 2. 遍历每一行数据（从第1行开始，即索引1，假设第0行是标题或空行）
//                    for (int rowNum = 2; rowNum <= sheet.getLastRowNum(); rowNum++) {
//                        Row row = sheet.getRow(rowNum);
//                        if (row == null) continue;
//
//                        // 3. 按列区间提取不同类型的数据
//                        List<SubmergenceRecord> records = extractRecordsFromRow(row, waterlevel);
//                        if (records == null || records.isEmpty()) continue;
//
//                        // 4. 将每条记录插入数据库
//                        batchInsertRecords(records);
//                    }
//                }
//
//                System.out.println("✅ 所有工作表数据处理完成。");
//
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//
//        // ================= 工具方法 =================
//
//        /**
//         * 从工作表名称中提取数字作为 waterlevel（如 "1.0" → 1.0, "2" → 2.0, "3.5" → 3.5）
//         */
//        private static double extractWaterlevel(String sheetName) {
//            if (sheetName == null || sheetName.trim().isEmpty()) return -1;
//
//            // 匹配数字（包括小数），如 1、2.5、3.0
//            java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\d+\\.?\\d*");
//            java.util.regex.Matcher matcher = pattern.matcher(sheetName);
//
//            if (matcher.find()) {
//                try {
//                    return Double.parseDouble(matcher.group());
//                } catch (NumberFormatException e) {
//                    System.err.println("工作表名称 '" + sheetName + "' 中的数字格式不正确。");
//                    return -1;
//                }
//            } else {
//                System.err.println("工作表名称 '" + sheetName + "' 中未找到有效的数字部分。");
//                return -1;
//            }
//        }
//
//        /**
//         * 从一行数据中提取不同区间的列，生成多个 SubmergenceRecord（类型1~4）
//         */
//        private static List<SubmergenceRecord> extractRecordsFromRow(Row row, double waterlevel) {
//            List<SubmergenceRecord> records = new ArrayList<>();
//
//            // === 类型 1：A~D 列（即索引 0~3）============================
////            String name1 = getCellValue(row.getCell(0)); // 地类名称
//            String village1 = getCellValue(row.getCell(1)); // 村
//            String town1 = getCellValue(row.getCell(2)); // 镇
//            String areaStr1 = getCellValue(row.getCell(3)); // 地类面积
//            double area1 = parseDouble(areaStr1);
//
//            if ( area1 > 0 && !village1.isEmpty() && !village1.equals("总和")) {
//                SubmergenceRecord r1 = new SubmergenceRecord();
//                r1.waterlevel = waterlevel;
//                r1.name = null;
//                r1.village = village1;
//                r1.town = town1;
//                r1.area = area1;
//                r1.type = 1; // 类型1
//                records.add(r1);
//            }
//
//            // === 类型 2：F~H 列（即索引 5~7）============================
//            String name2 = getCellValue(row.getCell(6)); // 地类名称
//            String areaStr2 = getCellValue(row.getCell(7)); // 地类面积
//            double area2 = parseDouble(areaStr2);
////            int count2 = 0; // 类型2没有数量，设为0或根据需求调整
//
//            if (name2 != null && !name2.isEmpty() && area2 > 0 && !name2.equals("总和")) {
//                SubmergenceRecord r2 = new SubmergenceRecord();
//                r2.waterlevel = waterlevel;
//                r2.name = name2;
//                r2.area = area2;
////                r2.count = count2;
//                r2.type = 2; // 类型2
//                records.add(r2);
//            }
//
//            // === 类型 3：J~N 列（即索引 9~13）============================
//            String name3 = getCellValue(row.getCell(10)); // 关键要素名称
//            String village3 = getCellValue(row.getCell(11));
//            String town3 = getCellValue(row.getCell(12)); // 镇
//            String areaStr3 = getCellValue(row.getCell(13));
//            double area3 = parseDouble(areaStr3);
//            if (name3 != null && !name3.isEmpty() && !name3.equals("总和")) {
//                SubmergenceRecord r3 = new SubmergenceRecord();
//                r3.waterlevel = waterlevel;
//                r3.name = name3;
//                r3.village = village3;
//                r3.town = town3;
//                r3.area = area3;
//                r3.type = 3; // 类型3
//                records.add(r3);
//            }
//
//            // === 类型 4：P~U 列（即索引 15~18）============================
//
//            String village4 = getCellValue(row.getCell(19)); // 村
//            String town4 = getCellValue(row.getCell(20)); // 镇
//            String populationStr4 = getCellValue(row.getCell(18)); // 人口
//            int population4 = parseInt(populationStr4);
//            if (village4 != null && !village4.isEmpty()) {
//                SubmergenceRecord r4 = new SubmergenceRecord();
//                r4.waterlevel = waterlevel;
//                r4.village = village4;
//                r4.town = town4;
//                r4.population = population4;
//                r4.type = 4; // 类型4
//                records.add(r4);
//            }
//
//
//            String name5 = getCellValue(row.getCell(23));
//            if (name5 != null && !name5.isEmpty()) {
//                SubmergenceRecord r5 = new SubmergenceRecord();
//                r5.waterlevel = waterlevel;
//                r5.name = name5;
//                r5.type = 5; // 类型4
//                records.add(r5);
//            }
//            String name6 = getCellValue(row.getCell(30));
//            if (name6 != null && !name6.isEmpty()) {
//                SubmergenceRecord r6 = new SubmergenceRecord();
//                r6.waterlevel = waterlevel;
//                r6.name = name6;
//                r6.type = 6; // 类型4
//                records.add(r6);
//            }
//            return records;
//        }
//
//
//
//        // ==================== 模型类 ====================
//        static class SubmergenceRecord {
//            double waterlevel;
//            String name;
//            String village;
//            String town;
//            Double area;
//            Integer count;
//            Integer population;
//            int type;
//
//            @Override
//            public String toString() {
//                return String.format(
//                        "[waterlevel=%.2f, type=%d, name='%s', village='%s', town='%s', area=%.2f, count=%d, population=%d]",
//                        waterlevel, type, name, village, town, area, count, population
//                );
//            }
//        }
//
//        // ==================== 工具方法：获取单元格值 ====================
//        private static String getCellValue(Cell cell) {
//            if (cell == null) return "";
//            switch (cell.getCellType()) {
//                case STRING:
//                    return cell.getStringCellValue().trim();
//                case NUMERIC:
//                    if (DateUtil.isCellDateFormatted(cell)) {
//                        return cell.getDateCellValue().toString();
//                    } else {
//                        return String.valueOf((long) cell.getNumericCellValue());
//                    }
//                case BOOLEAN:
//                    return String.valueOf(cell.getBooleanCellValue());
//                case FORMULA:
//                    return cell.getCellFormula();
//                default:
//                    return "";
//            }
//        }
//
//        // ==================== 工具方法：类型转换 ====================
//        private static double parseDouble(String value) {
//            try {
//                return value == null || value.trim().isEmpty() ? 0.0 : Double.parseDouble(value.trim());
//            } catch (NumberFormatException e) {
//                System.err.println("无法解析为 double: " + value);
//                return 0.0;
//            }
//        }
//
//        private static int parseInt(String value) {
//            try {
//                return value == null || value.trim().isEmpty() ? 0 : Integer.parseInt(value.trim());
//            } catch (NumberFormatException e) {
//                System.err.println("无法解析为 int: " + value);
//                return 0;
//            }
//        }
//
//    private static void batchInsertRecords(List<SubmergenceRecord> records) {
//        if (records == null || records.isEmpty()) {
//            System.out.println("⚠️ 批量插入：记录列表为空，跳过。");
//            return;
//        }
//
//        String sql = "INSERT INTO lhk_downstream_submergence_1 " +
//                "(waterlevel, name, village, town, area, count, population, type) " +
//                "VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
//
//        Connection conn = null;
//        PreparedStatement pstmt = null;
//
//        try {
//            // 1. 获取数据库连接
//            conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
//
//            // 2. 关闭自动提交，以便批量生效
//            conn.setAutoCommit(false);
//
//            // 3. 创建 PreparedStatement
//            pstmt = conn.prepareStatement(sql);
//
//            // 4. 循环添加每条记录到批处理
//            int count = 0;
//            for (SubmergenceRecord record : records) {
//                pstmt.setBigDecimal(1, BigDecimal.valueOf(record.waterlevel));
//                pstmt.setString(2, record.name);
//                pstmt.setString(3, record.village);
//                pstmt.setString(4, record.town);
//                pstmt.setBigDecimal(5, record.area != null ? BigDecimal.valueOf(record.area) : null);
//                pstmt.setObject(6, record.count != null ? record.count : null);
//                pstmt.setObject(7, record.population != null ? record.population : null);
//                pstmt.setInt(8, record.type);
//
//                pstmt.addBatch(); // 加入批处理
//                count++;
//
//                // 可选：每1000条执行一次批处理，避免内存过大
//                if (count % 1000 == 0) {
//                    int[] batchResult = pstmt.executeBatch();
//                    conn.commit(); // 提交事务
//                    System.out.println("✅ 批量插入了 " + batchResult.length + " 条记录（累计）");
//                }
//            }
//
//            // 5. 执行剩余的批处理（如果有）
//            int[] batchResult = pstmt.executeBatch();
//            conn.commit(); // 提交事务
//
//            System.out.println("✅ 批量插入完成，总共插入 " + batchResult.length + " 条记录");
//
//        } catch (SQLException e) {
//            // 发生异常时回滚
//            try {
//                if (conn != null) conn.rollback();
//            } catch (SQLException ex) {
//                ex.printStackTrace();
//            }
//            System.err.println("❌ 批量插入失败: " + e.getMessage());
//            e.printStackTrace();
//        } finally {
//            // 6. 关闭资源
//            try {
//                if (pstmt != null) pstmt.close();
//                if (conn != null) conn.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//        }
//    }
//    @Data
//    static class Submergence {
//        private BigDecimal waterlevel;
//        private String name;
//        private String village;
//        private String town;
//        private BigDecimal area;
//        private Integer count;
//        private Integer population;
//        private BigDecimal structure;
//        private Integer type;
//    }
}
